#include "Bsp_step_motor.h"

void clockwise_90(Step_Motor_Tydef motor)
{
    int i;
    HAL_GPIO_WritePin(motor.Direct_GPIO, motor.Direct_GPIO_PIN, GPIO_PIN_SET);
    for (i = 0; i < Cycle_90; i++)
    {
        HAL_GPIO_TogglePin(motor.Pull_GPIO, motor.Pull_GPIO_PIN);
        delay_us(step_time);
        HAL_GPIO_TogglePin(motor.Pull_GPIO, motor.Pull_GPIO_PIN);
        delay_us(step_time);
    }
    HAL_Delay(stop_time);
}
void counterclockwise_90(Step_Motor_Tydef motor)
{
    int i;
    HAL_GPIO_WritePin(motor.Direct_GPIO, motor.Direct_GPIO_PIN, GPIO_PIN_RESET);
    for (i = 0; i < Cycle_90; i++)
    {
        HAL_GPIO_TogglePin(motor.Pull_GPIO, motor.Pull_GPIO_PIN);
        delay_us(step_time);
        HAL_GPIO_TogglePin(motor.Pull_GPIO, motor.Pull_GPIO_PIN);
        delay_us(step_time);
    }
    HAL_Delay(stop_time);
}

void clockwise_180(Step_Motor_Tydef motor)
{
    int i;
    HAL_GPIO_WritePin(motor.Direct_GPIO, motor.Direct_GPIO_PIN, GPIO_PIN_SET);
    for (i = 0; i < Cycle_180; i++)
    {
        HAL_GPIO_TogglePin(motor.Pull_GPIO, motor.Pull_GPIO_PIN);
        delay_us(step_time);
        HAL_GPIO_TogglePin(motor.Pull_GPIO, motor.Pull_GPIO_PIN);
        delay_us(step_time);
    }
    HAL_Delay(stop_time);
}
void counterclockwise_180(Step_Motor_Tydef motor)
{
    int i;
    HAL_GPIO_WritePin(motor.Direct_GPIO, motor.Direct_GPIO_PIN, GPIO_PIN_RESET);
    for (i = 0; i < Cycle_180; i++)
    {
        HAL_GPIO_TogglePin(motor.Pull_GPIO, motor.Pull_GPIO_PIN);
        delay_us(step_time);
        HAL_GPIO_TogglePin(motor.Pull_GPIO, motor.Pull_GPIO_PIN);
        delay_us(step_time);
    }
    HAL_Delay(stop_time);
}
void clockwise_360(Step_Motor_Tydef motor)
{
    int i;
    HAL_GPIO_WritePin(motor.Direct_GPIO, motor.Direct_GPIO_PIN, GPIO_PIN_SET);
    for (i = 0; i < Cycle_360; i++)
    {
        HAL_GPIO_TogglePin(motor.Pull_GPIO, motor.Pull_GPIO_PIN);
        delay_us(Lift_step_time);
        HAL_GPIO_TogglePin(motor.Pull_GPIO, motor.Pull_GPIO_PIN);
        delay_us(Lift_step_time);
    }
    HAL_Delay(stop_time);
}
void counterclockwise_360(Step_Motor_Tydef motor)
{
    int i;
    HAL_GPIO_WritePin(motor.Direct_GPIO, motor.Direct_GPIO_PIN, GPIO_PIN_RESET);
    for (i = 0; i < Cycle_360; i++)
    {
        HAL_GPIO_TogglePin(motor.Pull_GPIO, motor.Pull_GPIO_PIN);
        delay_us(Lift_step_time);
        HAL_GPIO_TogglePin(motor.Pull_GPIO, motor.Pull_GPIO_PIN);
        delay_us(Lift_step_time);
    }
    HAL_Delay(stop_time);
}

void delay_us(uint32_t us)
{
    uint32_t delay = (HAL_RCC_GetHCLKFreq() / 4000000 * us);
    while (delay--)
    {
        ;
    }
}
